// 一个模拟的类 代表一个可变长度字符串

#include "stdtype.h"
#include "interval.h"

// 模拟类 可变长度字符串
// 警告: 请在该字符串使用结束后调用string_close方法释放内存空间
typedef struct String {
    Char* c;
    Byte closed;
    Int length;
} String;

// String构造方法 指定char数组字符串
void string_new_fromchar(String* obj, Char* c);
// String构造方法 指定char数组字符串和长度
void string_new_fromchar_limit(String* obj, Char* c, Int limit);
// String构造方法 指定字符串长度
void string_new_fromlength(String* obj, Int length);
// String构造方法 指定一个区间
void string_new_frominterval(String* obj, Interval* interval);

// String方法 打印该字符串
void string_print(String* obj);
// String方法 以原方法打印该字符串
void string_print_raw(String* obj);
// String方法 打印换行该字符串
void string_println(String* obj);
// String方法 以原方法打印换行该字符串
void string_println_raw(String* obj);

// String方法 往字符串后添加char数组字符串
void string_append_char(String* obj, Char* c);
// String方法 往字符串后添加一个指定长度的char数组字符串
void string_append_char_limit(String *str, Char* c, Int limit);
// String方法 往字符串后添加一个字符串
void string_append_string(String* obj, String* ap);

// String方法 获取该字符串的长度
Int string_length(String* obj);

// String方法 获取该字符串是否已被关闭
Byte string_isClosed(String *str);
// String方法 关闭该字符串 释放内存空间
void string_close(String* obj);